ast: reset JoinLevel at the beginning of TableRefsClause.Restore#1036
Open
Hexilee wants to merge 2 commits intopingcap:masterfrom
Open
ast: reset JoinLevel at the beginning of TableRefsClause.Restore#1036Hexilee wants to merge 2 commits intopingcap:masterfrom
Hexilee wants to merge 2 commits intopingcap:masterfrom
Conversation
Signed-off-by: hexilee <[email protected]>
Contributor
|
The culprit is actually the diff --git a/ast/dml.go b/ast/dml.go
index f6e4a1d..ac33cf8 100644
--- a/ast/dml.go
+++ b/ast/dml.go
@@ -91,12 +91,15 @@ func (n *Join) Restore(ctx *format.RestoreCtx) error {
ctx.WritePlain("(")
defer ctx.WritePlain(")")
}
- ctx.JoinLevel++
+ if n.Right != nil {
+ ctx.JoinLevel++
+ }
if err := n.Left.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Join.Left")
}
- ctx.JoinLevel--
- if n.Right == nil {
+ if n.Right != nil {
+ ctx.JoinLevel--
+ } else {
return nil
}
if n.NaturalJoin {also move the test case to |
Author
|
I don't think so. The following example also causes a syntax error in mysql. -- origin
SELECT * FROM (SELECT * FROM (SELECT * FROM `t1`) AS `tmp`) AS `tmp`, t-- restored
SELECT * FROM (SELECT * FROM ((SELECT * FROM (`t1`)) AS `tmp`)) AS `tmp`, tThe culprit is the |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Signed-off-by: hexilee [email protected]
What problem does this PR solve?
Currently,
format.RestoreCtx.JoinLeveldoes not work well in the multi-level subquery.If you parse the following SQL and restore it, you will get unnecessary pairs of parentheses in the inner subquery.
Unnecessary parentheses can be ignored by tidb. However, in mysql, it will cause a syntax error.
What is changed and how it works?
This PR resets
JoinLevelat the beginning ofTableRefsClause.Restore, thenJoinLevelwill never affect subqueries.Check List
Tests
Code changes